package com.estate.system.service.impl;

import java.util.List;

import com.google.gson.Gson;
import com.estate.common.utils.redis.RedisUtil;
import com.estate.system.domain.Lent;
import com.estate.system.domain.LentDetailAndLent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.estate.system.mapper.LentDetailMapper;
import com.estate.system.domain.LentDetail;
import com.estate.system.service.ILentDetailService;
import com.estate.common.core.text.Convert;

import javax.annotation.Resource;

/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author estate
 * @date 2022-05-28
 */
@Service
public class LentDetailServiceImpl implements ILentDetailService
{
    @Resource
    private LentDetailMapper lentDetailMapper;
    @Resource
    private RedisUtil redisUtil;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public LentDetail selectLentDetailById(Long id)
    {

        Gson gson = new Gson();
        String lentDetailJson = (String)redisUtil.get("lentDetail:" + id);
        //有可能存在缓存穿透的问题
        LentDetail lentDetail = new LentDetail();
        if (lentDetailJson!=null && lentDetailJson.equals("noExist")){
            System.out.println("bothnoExist1");
            return null;
        }else if(lentDetailJson==null){
            lentDetail=lentDetailMapper.selectLentDetailById(id);
            if (lentDetail==null){
                redisUtil.set("lentDetail:"+id,"noExist");
                System.out.println("bothnoExist");
                return null;
            }else{
                String s = gson.toJson(lentDetail);
                redisUtil.set("lentDetail:"+id,s);
                return lentDetail;
            }

        }else {
            //不等于null和noExist,还有也不是null,说明存在直接返回
            LentDetail lentDetail1 = gson.fromJson(lentDetailJson, LentDetail.class);

            return lentDetail1;

        }




    }

    /**
     * 左连接查出 lent和detail表共同的信息
     *  用redis改造过 还未测试
     * **/
    @Override
    public LentDetailAndLent selectLentDetailAndLentList(LentDetail lentDetail) {

        return lentDetailMapper.selectLentDetailAndLentList(lentDetail);
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param lentDetail 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<LentDetail> selectLentDetailList(LentDetail lentDetail)
    {
        return lentDetailMapper.selectLentDetailList(lentDetail);
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param lentDetail 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertLentDetail(LentDetail lentDetail)
    {

        int i = lentDetailMapper.insertLentDetail(lentDetail);
        if (i>0){
            redisUtil.del("lentDetail:"+lentDetail.getId());
            return i;
        }
        return i;
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param lentDetail 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateLentDetail(LentDetail lentDetail)
    {
        int i = lentDetailMapper.updateLentDetail(lentDetail);
        if (i>0){
            redisUtil.del("lentDetail:"+lentDetail.getId());
            return i;
        }
        return i;
    }

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteLentDetailByIds(String ids)
    {

        int i = lentDetailMapper.deleteLentDetailByIds(Convert.toStrArray(ids));
        if (i>0){
            String[] strings = Convert.toStrArray(ids);
            for (String key:strings){
                redisUtil.del("lentDetail:"+key);
            }

            return i;
        }
        return i;
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteLentDetailById(Long id)
    {
        int i = lentDetailMapper.deleteLentDetailById(id);
        if(i>0){
            redisUtil.del("lentDetail:"+id);
            return i;
        }
        return i;
    }
}
